The whole system on one page — not twenty briefs. The reflex arc, the three-layer stack, the file pattern every node repeats, the two gates, and where things live. Start here, then open CONTRIBUTING.md.
The suite is an autonomic-nervous-system analogue. Each -Dex node is an afferent receptor sensing exactly one signal; Ganglior is the relay bus where exports converge; the Integrator is central integration; the read-out is the insight. Same arc a knee-jerk follows.
Node exports converge as events on one shared bus, lined up by the clock.
Ganglior · the busOne daily read-out — what the autonomic system is doing, in plain words.
ANS Intelligenceganglior.node-export contract, consumed by the Integrator — never by reaching into another node's functions.Every file belongs to exactly one layer. Dependencies point downhill only — UI → DSP → CORE — with no cycles. The settling question for any line of code: would deleting it change a number, or only its appearance?
Rendering and input only. Layout, charts, the evidence-badge spans, the depth selector, file ingest, exports, and view-state persistence. It asks DSP for the number and the registry for how to show it — it never recomputes one.
One node's signal math: parsing, feature extraction, every metric. The domain expertise — complex, but only about its one signal. Runs headless in Node (the test suite essentially does). parseTimestamp is duplicated here per the Clock Contract, by design.
The constitution every node obeys — stable by default, extended by adding new surface, never mutating old. No "oxygen" or "glucose" knowledge ever lives here. New CORE capability is a new field/method, not a changed one.
A <Node>.src.html references external *.js in dependency order, then bundles to a standalone <Node>.html. The load order is the downhill direction: CORE first, then DSP, then UI.
Durability comes from enforced contracts, not tidy code. Run both after any change — a red is a blocker, not a nitpick. The shared assertions in tests/dex-tests.js are the public contract; keep back-compat rather than editing an assertion to hide a break.
Loads the real modules + shared assertions and drives a live app bundle. Open it, wait ~3 s, the #summary pill must be all-green. CI mirror: node tests/run-tests.mjs. Run after any DSP/app/cross change and after re-bundling.
Recomputes each bundle's buildHash and audits committed exports against it. Run after re-bundling — confirm no red mismatches. (A re-bundle changes the hash by design.)
Change *.js + <Node>.src.html, never the bundled <Node>.html, then re-bundle via the inliner. 100% local, system fonts only, no CDN.
Floating tMs = Date.UTC(...), read back with getUTC*. Parse vendor stamps by regex, never new Date(str). A missing stamp is null, never now().
Not every file — the landmarks. The rest are deep-dive briefs you open only when a task sends you there.
| <Node>.html | The shipped instrument — a frozen, hash-verifiable single file. Generated; don't hand-edit. |
| <Node>.src.html · <node>-*.js | The editable source for each node (DSP / render / app / registry / …). This is what you change. |
| kernel-constants · metric-registry · crossnight-envelope · ganglior-provenance | The shared CORE every node loads — thresholds, badge logic, envelope shape, provenance stamp. |
| Integrator.* · integrator-*.js | The fusion layer — consumes node exports, fuses same-night + longitudinal. |
| Dex-Test-Suite.html · verify-provenance.html · tests/ | The two gates + the shared assertions (the public contract). |
| synth-gen.* · cohort-*.js · cohort-*.html | SynthGen + the validation harness — synthetic corpus and the real-DSP experiments. |
| *-analysis.html · papers/ | The analysis tools and the working-preprint series each tool feeds. |
| CLAUDE.md · ARCHITECTURE-PRINCIPLES.md · LEXICON.md | The constitution, the why, and the naming system. Read before the briefs. |
| *-BRIEF.md · *-README.md | Deep dives. Open the one a task points you to — not the on-ramp. |